package com.yf.modules.system.service.api;

import com.yf.domain.security.Department;
import com.yf.model.query.DeptQueryCriteria;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * @author chentianwei
 * @date 2024-10-15 13:18
 * @description 部门Api
 */
public interface DepartmentService {

    /**
     * 查询部门信息
     *
     * @param deptQueryCriteria 部门信息查询条件
     * @return 部门集合
     */
    List<Department> queryDepartment(DeptQueryCriteria deptQueryCriteria);

    /**
     * 添加新的部门
     *
     * @param department 新部门
     */
    void addDept(Department department);

    /**
     * 编辑部门信息
     *
     * @param department 编辑过的实体
     */
    void editDept(Department department);

    /**
     * 批量删除部门信息
     *
     * @param ids 主键
     */
    void deleteDept(Set<Long> ids);

    /**
     * 下载部门信息
     *
     * @param response Servlet返回流
     */
    void downloadDept(HttpServletResponse response) throws IOException;

    /**
     * 构建完整的部门树结构
     * @param departmentList 部门数据
     * @return 树形结构表
     */
    Collection<Department> buildTree(List<Department> departmentList);

    /**
     * 获取部门结构树
     * @param ids 主键
     * @return 完整的部门树
     */
    Collection<?> getDeptSuperior(List<Long> ids);

    /**
     * 获取待删除的部门
     * @param deptList /
     * @param departments /
     * @return /
     */
    Set<Department> getDeleteDepts(List<Department> deptList, Set<Department> departments);

    /**
     * 验证是否被角色或用户关联
     * @param departments /
     */
    void verification(Set<Department> departments);
}
